//package com.wang.tool.util;
//
//
//import com.wang.tool.util.CommonUtil;
//
//import javax.validation.ConstraintViolation;
//import javax.validation.Validation;
//import javax.validation.Validator;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Set;
//
///**
// * jsr303验证工具
// *
// * @author shaopeng
// */
//public class JSRValidationUtil {
//
//    /**
//     * 校验器
//     */
//    private static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
//
//    public void validate(Object obj, Class<?>... groups) {
//        ValidateResult result = validateBean(obj, groups);
//        if (result.hasError()) {
//            throw new IllegalArgumentException(result.joinErrorStr());
//        }
//    }
//
//
//    /**
//     * 校验对象
//     *
//     * @param t      bean
//     * @param groups 校验组
//     * @return ValidResult
//     */
//    public static <T> ValidateResult validateBean(T t, Class<?>... groups) {
//        ValidateResult result = new ValidateResult();
//        try {
//            if (t == null) {
//                throw new IllegalArgumentException("验证对象不可为空");
//            }
//            Set<ConstraintViolation<T>> violationSet = validator.validate(t, groups);
//            if (CommonUtil.isNotEmpty(violationSet)) {
//                for (ConstraintViolation<T> violation : violationSet) {
//                    result.addError(violation.getPropertyPath().toString(), violation.getMessage());
//                }
//            }
//        } catch (Exception e) {
//            result.addError("", e.getMessage());
//        }
//        return result;
//    }
//
//    /**
//     * 校验bean的某一个属性
//     *
//     * @param t            bean
//     * @param propertyName 属性名称
//     * @return ValidResult
//     */
//    public static <T> ValidateResult validateProperty(T t, String propertyName) {
//        ValidateResult result = new ValidateResult();
//        try {
//            if (t == null) {
//                throw new IllegalArgumentException("验证对象不可为空");
//            }
//            Set<ConstraintViolation<T>> violationSet = validator.validateProperty(t, propertyName);
//            if (CommonUtil.isNotEmpty(violationSet)) {
//                for (ConstraintViolation<T> violation : violationSet) {
//                    result.addError(propertyName, violation.getMessage());
//                }
//            }
//        } catch (Exception e) {
//            result.addError("", e.getMessage());
//        }
//        return result;
//    }
//
//    /**
//     * 校验结果类
//     */
//    public static class ValidateResult {
//        /**
//         * 错误信息
//         */
//        private final List<ErrorMessage> errors = new ArrayList<>();
//
//        public boolean hasError() {
//            return errors.size() > 0;
//        }
//
//        /**
//         * 获取所有验证信息
//         *
//         * @return 集合形式
//         */
//        public List<ErrorMessage> getErrors() {
//            return errors;
//        }
//
//        /**
//         * 获取所有验证信息-带属性名
//         *
//         * @return 字符串形式
//         */
//        public String joinErrorStrWithName() {
//            StringBuilder sb = new StringBuilder();
//            for (ErrorMessage error : errors) {
//                sb.append(error.getName()).append(":").append(error.getMessage()).append(";");
//            }
//            if (sb.length() > 0) {
//                return sb.substring(0, sb.length() - 1);
//            }
//            return sb.toString();
//        }
//
//        /**
//         * 获取所有验证信息带有属性名
//         *
//         * @return 字符串形式
//         */
//        public String joinErrorStr() {
//            StringBuilder sb = new StringBuilder();
//            for (ErrorMessage error : errors) {
//                sb.append(error.getMessage()).append(";");
//            }
//            if (sb.length() > 0) {
//                return sb.substring(0, sb.length() - 1);
//            }
//            return sb.toString();
//        }
//
//        public void addError(String propertyName, String message) {
//            this.errors.add(new ErrorMessage(propertyName, message));
//        }
//
//        @Override
//        public String toString() {
//            if (hasError()) {
//                return joinErrorStr();
//            }
//            return "pass";
//        }
//    }
//
//    public static class ErrorMessage {
//
//        private String name;
//
//        private String message;
//
//        public ErrorMessage() {
//        }
//
//        public ErrorMessage(String name, String message) {
//            this.name = name;
//            this.message = message;
//        }
//
//        public String getName() {
//            return name;
//        }
//
//        public void setName(String name) {
//            this.name = name;
//        }
//
//        public String getMessage() {
//            return message;
//        }
//
//        public void setMessage(String message) {
//            this.message = message;
//        }
//
//        @Override
//        public String toString() {
//            return "ErrorMessage{" +
//                    "name='" + name + '\'' +
//                    ", message='" + message + '\'' +
//                    '}';
//        }
//    }
//
//
//}
